perm filename ZDELAY.FAI[MUS,LCS] blob
sn#319860 filedate 1977-12-01 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE ZDELAY
C00013 ENDMK
C⊗;
TITLE ZDELAY
ENTRY ZDELAY ;FUNCTION ZDELAY(Input,Curlen,BufLen,ARRAY Buffer,Inptr);
ENTRY SDELAY ;FUNCTION SDELAY(DUMMY,CURLEN,BUFLEN,ARRAY BUFFER,INPTR)
ENTRY ZERO ;FUNCTION ZERO(ARRAY Foo);
ZDELAY: 0 ;FUNCTION ZDELAY(Input, Curlen, BufLen, ARRAY Buffer, Inptr);
KIFIX 1,@4(16) ; BEGIN
ADD 1,3(16) ; VARIABLE Samp1, Samp2;
MOVE 0,@(16) ; Buffer[Inptr] ← Input; <Read in the new sample
MOVEM 0,(1)
MOVE 4,@4(16); INPUT Samp1 ← Inptr - Curlen; <Position readout pointer
FADR 4,[1.0] ; IF Samp1<0 THEN Samp1←Samp1+BufLen;<Might have to wrap around
CAML 4,@2(16); Inptr ← Inptr + 1; <Always increment input by 1 sample
SETZ 4, ;IF Inptr≥BufLen THEN Inptr←0;<Wrap around if at end of array
MOVEM 4,@4(16)
DL: MOVE 1,@4(16); GET INPTR THEN SUBTRACT CURLEN
FSBR 1,@1(16) ; IF Samp1<BufLen-1 THEN Samp2←Samp1+1<Are we interpolating between
SKIPGE 1 ; ELSE Samp2←0; <the last & first locations?
FADR 1,@2(16) ;RETURN
KIFIX 3,1 ;(Buffer[Samp1]+((Samp1-INT(Samp1))*(Buffer[Samp2]-Buffer[Samp1])));
FLTR 4,3 ; END;
ADD 3,3(16) ;***THIS CODE IS BASED ON THE FOLLOW FORTRAN
CAMN 4,1 ; BUFFER(IPTR)=INPUT
JRST ZD ; IPTR=IPTR+1
FSBR 4,1 ; P=IPTR-CURLEN
FADR 1,[1.0] ; IF(P)P=P+BUFLEN
CAML 1,@2(16) ; A=FLOAT(IFIX(P))
SETZ 1, ; IF(A.EQ.P)GO TO 1
KIFIX 1,1 ; A=P-A
ADD 1,3(16) ; Q=P+1
MOVN 0,(1) ; IF(Q.GE.BUFLEN)Q=0
FADR 0,(3) ; ZDELAY=BUFFER(P)+(BUFFER(Q)-BUFFER(P))*A
FMPR 0,4 ; RETURN
FADR 0,(3) ;1 ZDELAY=BUFFER(P)
JRA 16,5(16) ; END
ZD: MOVE 0,(3)
JRA 16,5(16)
SDELAY: 0 ;SDELAY USES MOST OF ZDELAY CODE
JRST DL ;ONLY READS DELAY ARRAY
ZERO: 0 ;FUNCTION ZEROX(ARRAY Foo);
HRRZ 1,(16)
MOVE 1,-1(1) ; BEGIN VARIABLE Len,I;
FSC 1,233 ;1 IS FLTING PT LENGTH
KIFIX 1,1 ; Len←LENGTH(Foo)-1;
SOJ 1,
ZR: MOVE 2,1
ADD 2,(16) ; FOR I←0 STEP 1 UNTIL Len DO Foo(I)←0;
SETZM (2) ; END
SOJGE 1,ZR
JRA 16,1(16)
END